package cn.doitedu.day05

/**
 * scala中，方法（Method）和函数（Function）是有区别的
 */
object MethodToFunction {


  //定义一个方法
  def m1(x: Int): Int = {
    x * 10
  }

  def main(args: Array[String]): Unit = {

    val arr = Array(1,2,3,4,5)

//    val f = (x: Int) => x * 10
//
//    val r1 = arr.map(f)
//    val r2 = arr.map(x => x * 10)
//    val r3 = arr.map(_ * 10)
//    val ff = new Function1[Int, Int] {
//      override def apply(v1: Int): Int = {
//        v1 * 10
//      }
//    }
//    val r4 = arr.map(ff)

    //调用m1方法
    //val r = m1(8)

    //假象：将方法传入到方法中
    //arr的map是方法
    //val res1: Array[Int] = arr.map(m1)
    //val res2: Array[Int] = arr.map(m1 _) //将方法转成一个新的函数，这个函数会调用原来的方法
    //println(res2.toBuffer)

    //将方法转成一个新的函数
    //m1是一个方法的名称，后面跟了空格+下划线
    val nf: Int => Int = m1 _
    //调用新的函数
    val r = nf(8)
    println(r)

    //生成了新的函数，函数的参数格式，类型和返回值类型，与方法是一样的
    //生成新的函数，内部调用了原来的方法
    val newF: Int => Int = (x: Int) => {
      m1(x)
    }



  }

}
